package com.xunwulian.web.bean;

import com.alipay.demo.trade.model.ExtendParams;
import com.alipay.demo.trade.model.GoodsDetail;
import com.alipay.demo.trade.model.builder.AlipayTradePrecreateRequestBuilder;
import com.xunwulian.base.util.StringUtil;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/2/22.
 */
public class ZfbEntity implements Serializable {
    /*
     * (必填) 商户网站订单系统中唯一订单号，64个字符以内，
     * 只能包含字母、数字、下划线，需保证商户系统端不能重复，
     * 建议通过数据库sequence生成，
     */
    public String outTradeNo = StringUtil.createIdentity(64);

    // (必填) 订单标题，粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
    public String subject;

    /*
     * (必填) 订单总金额，单位为元，不能超过1亿元
     * 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
     */
    public String totalAmount;

    /*
     * (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
     * 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
     */
    public String undiscountableAmount;

    /*
     * 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账号，(打款到sellerId对应的支付宝账号)
     * 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
     */
    public String sellerId;

    // 订单描述，可以对交易或商品进行一个详细地描述，比如填写"购买商品2件共15.00元"
    public String body;

    // 商户操作员编号，添加此参数可以为商户操作员做销售统计
    public String operatorId;

    // (可选) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
    public String storeId = "-1";

    // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，详情请咨询支付宝技术支持
    public ExtendParams extendParams;

    // 支付超时，定义为120分钟
    public String timeoutExpress = "120m";

    // 商品明细列表，需填写购买商品详细信息，
    public List<GoodsDetail> goodsDetailList = new ArrayList();

    public String code_url;

    public ZfbEntity(String subject, double totalAmount) {
        this.subject = subject;
        this.totalAmount = String.valueOf(totalAmount);
    }

    /**
     * 添加一个商品信息
     *
     * @param goodsId   商品id
     * @param goodsName 商品名称
     * @param price     商品单价（单位为分）
     * @param quantity  商品数量
     * @return 商品明细列表
     */
    public List<GoodsDetail> addGoodsDetail(String goodsId, String goodsName, long price, int quantity) {
        goodsDetailList.add(GoodsDetail.newInstance(goodsId, goodsName, price, quantity));
        return goodsDetailList;
    }

    /**
     * 创建一个支付请求
     *
     * @return 支付请求
     */
    public AlipayTradePrecreateRequestBuilder createRequest() {
        // 创建扫码支付请求builder，设置请求参数
        AlipayTradePrecreateRequestBuilder request = new AlipayTradePrecreateRequestBuilder();
        request.setSubject(subject);
        request.setTotalAmount(totalAmount);
        request.setOutTradeNo(outTradeNo);
        if (StringUtils.isNoneBlank(undiscountableAmount)) {
            request.setUndiscountableAmount(undiscountableAmount);
        }
        if (StringUtils.isNotBlank(sellerId)) {
            request.setSellerId(sellerId);
        }
        if (StringUtils.isNotBlank(body)) {
            request.setBody(body);
        }
        if (StringUtils.isNotBlank(operatorId)) {
            request.setOperatorId(operatorId);
        }
        if (StringUtils.isNoneBlank(storeId)) {
            request.setStoreId(storeId);
        }
        if (extendParams != null) {
            request.setExtendParams(extendParams);
        }
        if (StringUtils.isNotBlank(timeoutExpress)) {
            request.setTimeoutExpress(timeoutExpress);
        }
        // 支付宝服务器主动通知商户服务器里指定的页面http路径,根据需要设置
        request.setNotifyUrl("http://www.zhixuntongda.com/myPay/payCallback2");
        if (goodsDetailList.size() != 0) {
            request.setGoodsDetailList(goodsDetailList);
        }

        return request;
    }
}
